<template>
  <div></div>
</template>

<script>
export default {
  name: 'table',
  data() {
    return {
      loading: false,
      tableList: [],
    };
  },
  methods: {
    tableRowClassName: function (row) {
      return '';
    },
    // 查：predicate：断言，
    findIndexByPredicate(predicate) {
      // 这里的predicate通常是对象格式，用于下面调用时从列表中判断是否相同格式的存在，
      // 例如传入{id:1}，则查找是否存在key为id，value为1的对象存在
      // 项目中通常会截取部分对象特征使用
      return this._.findIndex(this.tableList, predicate);
    }, // 按特征对象模式，查找是否存在tableList中，返回idx

    //增：放弃push多个，逐个item处理，predicate：断言，isReverse：是否反向
    addTableRow(item, predicate, isReverse) {
      let PisU = this._.isUndefined(predicate);
      // 检测是否有断言，同时确认默认插入方向：有断言push，无断言unshift
      if (!PisU) {
        let idx = this.findIndexByPredicate(predicate);
        if (idx > -1) return; // 断言证明存在，则不重复添加；
      }
      // 断言不存在
      let isR = this._.isBoolean(isReverse) ? isReverse : false; //默认不反向，不传则为默认
      let isPush = isR ? !PisU : PisU;
      // 没断言没反向，push，常用场景：ajaxData
      // 有断言有反向，push
      // 没断言有反向，unshift
      // 有断言没反向，unshift，常用场景：凭空置顶
      if (isPush) {
        this.tableList.push(item);
      } else {
        this.tableList.unshift(item);
      }
    },

    //删
    removeData(predicate) {
      if (this._.isUndefined(predicate)) return;
      let idx = this.findIndexByPredicate(predicate);
      if (idx === -1) return;
      this.tableList.splice(idx, 1);
    },
    clearTable() {
      this.tableList.splice(0, this.tableList.length);
    },
    // 移动
    oneRowSetTop(predicate) {
      if (this._.isUndefined(predicate)) return;
      let idx = this.findIndexByPredicate(predicate);
      if (idx === -1) return;
      this.tableList.splice(0, 0, ...this.tableList.splice(idx, 1));
    }, // 置顶

    //改
    updataByPredicate({ predicate, key, value }) {
      let idx = this.findIndexByPredicate(predicate);
      if (idx === -1) return;
      this.$set(this.tableList[idx], key, value);
    },
  },
};
</script>

<style></style>
